package com.suray.rgv.son.util;

/**
 * 注：动作 0x01 到 0x0d(含 0x0d)需要需要向 0004（启动）写 1 触发。0x0e 到 0x10（含 0x10），不 需要启动触发（0x0004）也可执行。
 */
public enum RgvSonAction {
    INVALID(-1, "无效"),
    GET_CARGO(1, "原地取货"),
    PUT_CARGO(2, "原地放货"),
    UNLOAD_MOVE(3, "从起点到终点移动 （依赖数据，0004 到 0012）"),
    CALIBRATION(4, "原地校准"),
    OUT_GET_CARGO_AND_BACK(5, "从本体车运动到终点，执行取货，然后返回本体车"),
    OUT_PUT_CARGO_AND_BACK(6, "从本体车运动到终点，执行放货，然后返回本体车"),
    MOVE_BY_SPEED(7, "行驶按速度移动(依赖数据，0005、0006、0007)。（仅运动 2 秒）"),
    PALLET_UP_BY_SPEED(8, "顶升按速度移动（依赖数据，0008、0009、0010）。（仅运动 2 秒）"),
    CHARGE(9, "子车开始充电指令"),
    MOVE_BY_DISTANCE(0xA, "（十进制 10）纯位移行驶，按照间隔距离 1 位移行驶。（依赖数据，0004、0005、0006、000c、000d、000e、0010）"),
    CLEAR_MOVE_ODO(0xB, "行驶位移量清零"),
    CLEAR_PALLET_ODO(0xC, "升降位移量清零"),
    PALLET_CALIBRATION(0xD, "托盘校准"),
    GET_CAR_STATUS(0xE, "获取子车状态动作（指令）"),
    CONFIRM_RESULT(0xF, "动作结果确认,同“保持寄存器（W/R）-0x0003”，收到此动作时，货叉车清空动作结果输入寄 存器和错误信息输入寄存器。"),
    CLEAR_FAULT(0x10, "“故障清除”动作，此动作便于调度系统和母车交互。母车收到此动作命令后（json 格式）， 母车向子车通过 modbus 发送“清除故障（0x0002）”。此动作专供母车和调度系统使用，子车单 独收到此动作时，不做处理。"),
    STOP_MOVE_BY_SPEED(0x11, "行驶速度停"),
    STOP_PALLET_UP_BY_SPEED(0x12, "顶升速度停"),
    STOP_CHARGE(0x13, "子车停止充电指令"),
    CLEAR_TASK(0x20, "清除任务"),
    ;

    int value;
    String des;
    RgvSonAction(int value, String des) {
        this.value = value;
        this.des = des;
    }

    public static RgvSonAction parseAction(int value, String des) {
        for (RgvSonAction rgvSonAction : RgvSonAction.values()) {
            if (rgvSonAction.value == value) {
                return rgvSonAction;
            }
        }

        return INVALID;
    }

    public int getValue() {
        return value;
    }

    @Override
    public String toString() {
        return des;
    }
}
